---
title: 로깅 및 오류 보고
version: 1
---

import { Link } from "/src/components/Link";
import { AutoSnippet, When } from "/src/components/CodeSnippet";
import providerObserver from "!!raw-loader!/docs/essentials/provider_observer/provider_observer.dart";

Riverpod은 기본적으로 provider 트리에서 발생하는 모든 이벤트를 수신하는 방법을 제공합니다.  
이 기능은 모든 이벤트를 기록하거나 원격 서비스에 오류를 보고하는 데 사용할 수 있습니다.

이는 `ProviderObserver` 클래스를 사용하고 이를 `ProviderScope`/`ProviderContainer`에 전달하면 됩니다.

## ProviderObserver 정의하기

`ProviderObserver`는 확장(extend)해야 하는 클래스입니다.  
이벤트를 수신하기 위해 재정의할 수 있는 다양한 메서드를 제공합니다:

- `didAddProvider`, provider가 트리에 추가(added)될때 호출
- `didUpdateProvider`, provider가 갱신(updated)될때 호출
- `didDisposeProvider`, provider가 폐기(disposed)될때 호출
- `providerDidFail`, synchronous provider가 에러를 던질때 호출

<AutoSnippet raw={providerObserver} />

## ProviderObserver 사용하기

이제 옵저버(observer)를 정의했으니 이를 사용해야 합니다.  
그러기 위해서는 `ProviderScope` 또는 `ProviderContainer`에 전달해야 합니다:

```dart
runApp(
  ProviderScope(
    observers: [
      MyObserver(),
    ],
    child: MyApp(),
  )
);
```

```dart
final container = ProviderContainer(
  observers: [
    MyObserver(),
  ],
);
```
